package com.healthcloud.dao;

import com.healthcloud.entity.PatientRecord.RecordInfoVo;
import com.healthcloud.entity.TestresultEntity;
import com.healthcloud.entity.testresult.TestResultDto;
import com.healthcloud.entity.testresult.TestresultVo;
import com.healthcloud.utils.PageParam;
import org.apache.ibatis.annotations.Param;


import java.util.List;

/**
 * 检测结果
 *
 * @author yucl
 * @email yucailong1111@126.com
 * @date 2018-05-31 16:20:16
 */
public interface TestresultDao extends BaseDao<TestresultEntity> {

    List<TestresultEntity> queryResult(@Param("entity") TestresultEntity entity, @Param("companyId") String companyId, @Param("pageParam") PageParam pageParam);

    int countResult(@Param("entity") TestresultEntity entity, @Param("companyId") String companyId);

    List<TestresultEntity> queryBySN(@Param("mkMedicalInstrumenId") String mkMedicalInstrumenId);

    List<TestresultEntity> queryResultBySN(@Param("mkMedicalInstrumenId") String mkMedicalInstrumenId, @Param("pageParam") PageParam pageParam);

    int countResultBySN(@Param("mkMedicalInstrumenId") String mkMedicalInstrumenId);

    List<RecordInfoVo> queryRecord(@Param("idCard") String idCard, @Param("testKindCode") String testKindCode,
                                   @Param("beginTime") String beginTime, @Param("endTime") String endTime,
                                   @Param("pageParam") PageParam pageParam);

    int countRecord(@Param("idCard") String idCard, @Param("testKindCode") String testKindCode,
                    @Param("beginTime") String beginTime, @Param("endTime") String endTime);

    List<TestresultEntity> queryLastBp(@Param("idCard") String idCard);

    String[] queryListTime(@Param("idCard") String idCard, @Param("beginTime") String beginTime,
                           @Param("endTime") String endTime, @Param("pageParam") PageParam pageParam);

    /**
     * 根据身份证号、开始时间和结束时间，查询测试时间
     *
     * @param idCard
     * @param beginTime
     * @param endTime
     * @return
     */
    String[] listTestTimeByIdCardAndTime(@Param("idCard") String idCard, @Param("beginTime") String beginTime,
                                         @Param("endTime") String endTime);

    List<TestresultEntity> queryByListTime(@Param("idCard") String idCard, @Param("testTime") String[] testTime);

    int countByListTime(@Param("idCard") String idCard, @Param("testTime") String[] testTime);

    TestresultEntity queryLastBg(@Param("idCard") String idCard, @Param("testItemCode") Integer testItemCode);

    List<TestresultEntity> queryBgList(@Param("idCard") String idCard, @Param("testItemCode") Integer testItemCode,
                                       @Param("pageParam") PageParam pageParam);

    List<TestresultEntity> searchBgList(@Param("idCard") String idCard, @Param("testKindCode") Integer testKindCode,
                                        @Param("beginTime") String beginTime, @Param("endTime") String endTime,
                                        @Param("pageParam") PageParam pageParam);

    int countBgList(@Param("idCard") String idCard, @Param("testKindCode") Integer testKindCode,
                    @Param("beginTime") String beginTime, @Param("endTime") String endTime);

    List queryPatientTests(@Param("entity") TestresultVo entity, @Param("pageParam") PageParam pageParam);

    List queryPatientBpTests(@Param("entity") TestresultVo entity,
                             @Param("pageParam") PageParam pageParam);

    List<TestresultEntity> queryRecordDetail(@Param("idCard") String idCard, @Param("testKindCode") Integer testKindCode,
                                             @Param("testTime") String testTime);

    int queryPatientTestsCount(@Param("entity") TestresultVo entity);

    int queryPatientBpTestsCount(@Param("entity") TestresultVo entity);

    List resultAvgByDay(@Param("idCard") String idCard, @Param("date") String date, @Param("testItemCodes") String testItemCodes);

    List<TestresultEntity> queryListVo(@Param("entity") TestresultVo entity, @Param("pageParam") PageParam pageParam);

    int queryTotalVo(@Param("entity") TestresultVo entity);

    List queryPatientBfTests(@Param("entity") TestresultVo entity, @Param("pageParam") PageParam pageParam);

    int queryPatientBfTestsCount(@Param("entity") TestresultVo entity);

    /**
     * 统计当年血压测试正常结果
     */
    int countPatientBpTestsCurrYear(@Param("hospitalIds") String hospitalIds, @Param("type") String type);

    /**
     * 修改病人身份证号
     *
     * @param oldIdCard 修改前身份证号
     * @param newIdCard 修改后身份证号
     */
    void updateIdCard(@Param("newIdCard") String newIdCard, @Param("oldIdCard") String oldIdCard);

    /**
     * 查找血糖记录
     *
     * @param entity
     * @param pageParam
     * @return
     */
    List patientBsTests(@Param("entity") TestResultDto entity, @Param("pageParam") PageParam pageParam);

    int coutPatientBsTests(@Param("entity") TestResultDto entity);

    /**
     * 查找血压记录
     *
     * @param entity
     * @param pageParam
     * @return
     */
    List patientBpTests(@Param("entity") TestResultDto entity, @Param("pageParam") PageParam pageParam);

    int coutPatientBpTests(@Param("entity") TestResultDto entity);


    /**
     * 修改血糖数据
     *
     * @param id
     * @param testItemCode
     */
    void updateBs(@Param("id") Integer id, @Param("testItemCode") String testItemCode, @Param("testItemName") String testItemName);

    /**
     * 检测记录列表
     *
     * @param testResultDto
     * @param page
     * @return
     */
    List findList(@Param("entity") TestResultDto testResultDto, @Param("pageParam") PageParam pageParam);

    int countFindList(@Param("entity") TestResultDto testResultDto);
}
